home *** CD-ROM | disk | FTP | other *** search
- /*
- * @(#)trace.c 1.7 1/20/89
- */
- #include "types.h"
- #include "flags.h"
- #include "assert.h"
- #include "trace.h"
-
- int traceenvironment,
- traceemit,
- traceemitmove,
- traceallocate,
- tracehelp,
- traceimports,
- traceatctsort,
- traceassign,
- tracetempstack,
- tracetempreg,
- tracepasses,
- tracekernel,
- tracemanifest,
- traceconform,
- traceconformfailure,
- tracehandler,
- tracegraph,
- tracematchat,
- tracedoto,
- tracebuiltins,
- tracelocals,
- traceknowct,
- traceknowmanifest,
- traceknowlocal,
- tracegenerate,
- traceinvoccache,
- tracedelay = 1,
- tracecopy,
- traceprimitive,
- tracelinenumber,
- tracetypecheck,
- tracedebuginfo;
-
- typedef struct {
- char *name;
- int *flag;
- } flagTable, *flagTablePtr;
-
- flagTable table [] = {
- "environment", &traceenvironment,
- "emit", &traceemit,
- "emitmove", &traceemitmove,
- "allocate", &traceallocate,
- "help", &tracehelp,
- "imports", &traceimports,
- "atctsort", &traceatctsort,
- "assign", &traceassign,
- "tempstack", &tracetempstack,
- "tempreg", &tracetempreg,
- "passes", &tracepasses,
- "kernel", &tracekernel,
- "manifest", &tracemanifest,
- "conform", &traceconform,
- "conformfailure", &traceconformfailure,
- "handler", &tracehandler,
- "graph", &tracegraph,
- "matchat", &tracematchat,
- "doto", &tracedoto,
- "builtins", &tracebuiltins,
- "locals", &tracelocals,
- "knowct", &traceknowct,
- "knowmanifest", &traceknowmanifest,
- "knowlocal", &traceknowlocal,
- "generate", &tracegenerate,
- "invoccache", &traceinvoccache,
- "delay", &tracedelay,
- "copy", &tracecopy,
- "primitive", &traceprimitive,
- "linenumber", &tracelinenumber,
- "typecheck", &tracetypecheck,
- "debuginfo", &tracedebuginfo,
- NULL, 0
- };
-
- void toLower(s)
- register char *s;
- {
- register char c;
- while (c = *s) {
- if (c >= 'A' && c <= 'Z') *s += ('a' - 'A');
- s++;
- }
- }
-
- char *find(s, c)
- register char *s, c;
- {
- register char theC;
- while ((theC = *s) && theC != c) s++;
- return(theC == c ? s : NULL);
- }
-
- parseTraceFlag(f)
- register char *f;
- {
- char *comma, *equals;
- register flagTablePtr tp;
- int value;
-
- assert(*f == '-'); f++;
- assert(*f == 'T'); f++;
- toLower(f);
- while (f && *f) {
- comma = find(f, ',');
- if (comma != NULL) *comma = '\0';
- equals = find(f, '=');
- if (equals == NULL) {
- value = 1;
- } else {
- value = atoi(equals+1);
- if (value <= 0) value = 1;
- *equals = '\0';
- }
- for (tp = &table[0]; tp->name; tp++) {
- if (!strcmp(f, tp->name)) {
- *tp->flag = value;
- break;
- }
- }
- if (tp->name == NULL) {
- fprintf(stdout, "Unknown trace name \"%s\"\n", f);
- return(0);
- }
- f = (comma == NULL ? NULL : comma + 1);
- }
- return(1);
- }
-
- void initializeTrace()
- {
- register flagTablePtr tp;
-
- IFTRACE(help, 1) {
- fprintf(stdout, "Trace\t\tValue\n");
- for (tp = &table[0]; tp->name; tp++) {
- fprintf(stdout, "\"%s\" -->\t%d\n", tp->name, *tp->flag);
- }
- }
- if (traceconform > 0) traceconform = 0x10000000;
- if (traceconformfailure > 0) traceconformfailure = 0x10000000;
- }
-
- /*VARARGS2*/
- void trace(level, format, args)
- int level;
- char *format;
- int args;
- {
- while (--level > 0) putc(' ', stdout);
- _doprnt(format, &args, stdout);
- putc('\n', stdout);
- }
-